package com.example.big_event.service.impl;

import com.example.big_event.mapper.UerMapper;
import com.example.big_event.pojo.Result;
import com.example.big_event.pojo.User;
import com.example.big_event.service.UserService;
import com.example.big_event.utils.Md5Util;
import com.example.big_event.utils.ThreadLocalUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.time.LocalDateTime;
import java.util.Map;


@Service//声明这是service层
public class UserServiceimpl implements UserService {

    @Autowired//注解注入mapper对象
    private UerMapper mapper;

    @Override//定义根据用户名查找用户名方法 传入用户名
    public User findByuserUserName(String username) {

        //mapper调用方法
        User user =  mapper.findByuserUserName(username);

        //返回user对象
        return user;
    }

    @Override//注册功能方法  传入密码和用户名
    public void register(String username, String password) {

        //密码加密后再存入数据库 调用加密方法类加密密码后传入数据库
        String md5String = Md5Util.getMD5String(password);

        System.out.println(md5String);

        //mapper方法将数据传到dao层 dao层的sql语句将数据写入到数据库中
        mapper.add(username,md5String);

    }

    @Override//更新用户信息 传入用户对象
    public void update(User user) {

        //设置修改时间
        user.setUpdateTime(LocalDateTime.now());//获取系统当前时间

        //调用mapper执行方法
        mapper.update(user);
    }

    @Override//传入用户头像图片
    public void updateavartar(String avartarurl) {

        //从ThreadLocalUtil中获取到用户信息  ThreadLocalUtil中会返回一个map集合对象
       Map<String,Object> map = ThreadLocalUtil.get();//经过拦截器的解析令牌时已经把业务数据添加到了ThreadLocalUtil中了

        //在map集合中get方法中使用字符串获取到id
       Integer id = (Integer) map.get("id");

       //mapper对象调用方法根据传入的url和id在dao层执行
        mapper.updateavartar(avartarurl,id);

        Result.success();
    }

    @Override//更新密码 传入新密码
    public void updatepassword(String newPassword) {

        //ThreadLocalUtil中通过map集合获取到id
       Map<String,Object> map = ThreadLocalUtil.get();

        Integer id = (Integer)map.get("id");

        //调用工具类的方法对密码进行加密
        String md5String = Md5Util.getMD5String(newPassword);

        //传入加密后的密码到dao层
        mapper.updatepassword(md5String,id);

    }
}
